科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB.Net编程实现Web Service的基础

VB.Net编程实现Web Service的基础

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文的主要内容是简要介绍一下Web Service的相关知识,以及使用Visual Basic .Net实现Web Services的具体方法和典型步骤。

作者:天极 来源:IT专家网 2008年4月2日

关键字: 基础 web VB net Windows

  • 评论
  • 分享微博
  • 分享邮件
Web Service目前可是目前计算机界一个非常流行的技术了,以至于有些人把Web Service列入目前最热门的十大技术之一。的确随着互联网的广泛应用和发展,尤其是电子商务的发展,出于互联网上各种复杂的应用系统和对更高安全性的要求,Web Service的横空出世的确满足了当前这些的要求和需要,其中的原因在下文中有详细的介绍。本文的主要内容是简要介绍一下Web Service的相关知识,以及使用Visual Basic .Net实现Web Services的具体方法和典型步骤。

  一.Web Service为何物,我们为什么需要它:

  Web Service的主要功能就是可以实现实现跨平台的功能调用。同时由于Web Service中使用XML来进行数据交换,所以在使用Web Service时不用担心防火墙的影响。由于Web Service集成了各种功能,并提供了一个友好的界面。所以在Web Service能够实现软件的重用。

  另外Web Service的调用非常简单,简而言之调用互联网上的Web Service 就如同调用本地的组件一样简单,就是通过HTTP协议来调用互联网上的组件。至于具体的调用方法,请参阅本文第五节第七段的内容。所以Web Service就是互联网上的组件调用。

  二.和Web Service相关的标准、协议:

  Web Service是通过一系列标准和协议来保证和程序之间的动态连接和实现其安全调用的。其中主要的标准和协议是:XML、WSDL、SOAP、HTTP、UDDI。下面就简要介绍这些标准和协议。

  1. XML:Web Service之间和Web Service和应用程序之间都是采用XML进行数据交换的。Web Service由于基于了XML,,这样Web Service在具备XML带来的优势的同时,也拥有了由于XML所带来的缺点。其中XML所带来的最重要缺点就是Web Service将大量的占有CPU的资源,因为XML数据要经过多步处理才能被系统使用。所以,即使调用一个功能较小的Web Service,也会感觉速度很慢,所以网络中对运行Web Service的主机要求是很高的。

  2. HTTP:应用程序是提供HTTP协议来调用Web Service的。所以HTTP在Web Service调用过程中,起着通道的作用。

  3. WSDL::是Web Service描述语言的简写。它是XML格式,其作用是描述Web Service,指示应用程序和与Web Servie交互的方法。当实现了某种Web Service服务时,为了让别的程序调用,就必须告诉此Web Service的接口。如:服务名称,服务所在的机器名称,监听端口号,传递参数的类型等等。WSDL就是规定了有关Web Services描述的标准。

  4. UDDI:是Universal Description, Discovery, and Integration的缩写。简单说,UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。

  5. SOAP:是"Simple Object Access Protocol"的缩写,即:简单对象访问协议。SOAP是一种消息传递的协议,它规定了Web Services之间传递信息的方式。

  三.本文章的程序设计、调试和运行的环境:

  (1).微软公司视窗2003中文企业版。

  (2).Visual Studio .Net 2003企业构建版,.Net FrameWork SDK 1.1版本号4322。

  (3).IIS服务启动。

  四.Visual Basic .Net实现Web Service:

  .Net 的大的推动了Web Service的发展,而Visual Studio .Net的出现又极大的推动了Web Service的的广泛应用。在Visual Studio .Net推出之前,编写一个Web Service是一项非常复杂的工作,同样调用这个Web Service也十分麻烦。由于Visual Studio .Net对Web Service提供了较强的支持,很多细致、烦杂的工作都由Visual Studio .Net自动完成了。这样就使得上述工作变得非常简单。甚至不了解Web Service和其相关的标准、协议,也可以使用Visual Studio .Net编写Web Service,并使用这个Web Service。下面就来用Visual Basic .Net实现一个Web Service,此Web Service和数据库相关,数据库类型选用的是Sql Server。此Web Service提供了二个函数功能调用,其一名称为Binding,用以实现数据绑定,其二名称为Update,用以更新数据库中的数据。以下就是Visual Basic .Net实现此Web Service的具体步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【ASP.NET Web 服务】。

  5. 在【位置】的文本框中输入"http://localhost/UpdateDataWebService"后,单击【确定】按钮,这样在Visual Studio .Net就会计算机Internet信息服务的默认目录中创建一个名称为"UpdateDataWebService"文件夹,里面存放的是此项目的文件。具体如图01所示:

  图01:创建Web Service项目对话框

  6. 选中【解决方案资源管理器】中的"Service1.asmx"文件,单击鼠标右键,在弹出的菜单中选择【查看代码】,则进入Service1.asmx.vb的编辑界面。

  7. 在Service1.asmx..vb的首部,在导入命名空间的代码区中添加下列代码,下列代码作用是导入命名空间System.Data.SqlClient:

  Imports System.Data.SqlClient

  8. 在Service1.asmx..vb文件的"Public Class Service1 Inherits System.Web.Services.WebService"代码后,添加下列代码,下列代码是在Web Service中定义二个功能调用:

<WebMethod ( ) > Public Function Binding ( ) As DataSet
 Dim con As New SqlConnection ( "Server = localhost ; uid = sa ; pwd = ; database = northwind" )
 Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )
 Dim ds As New DataSet ( )
 daCust.Fill( ds , "Cust" )
 Return ds
End Function
<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet
 Dim con As New SqlConnection ( "Server = localhost ; uid = sa ; pwd = ; database = northwind " )
 Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )
 Dim cbCust As New SqlCommandBuilder ( daCust )
 daCust.Update ( ds , "Cust" )
 Return ds
End Function
 9. 保存上述的修改,一个简单的操作Sql Server数据库的Web Service就完成了,此时单击快捷键F5,此Web Service就开始运行,并可以对外提供服务了。具体如图02所示:

  图02:Web Service提供服务是的界面

  Service1.asmx.vb的代码清单如下:

Imports System.Web.Services
Imports System.Data.SqlClient
<WebService ( Namespace := "http://tempuri.org/" ) > _
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod ( ) > Public Function Binding ( ) As DataSet
'Modify this Connection string to use your SQL Server and log on.
 Dim con As New SqlConnection ( "Server=localhost;uid=sa;pwd=;database=northwind" )
 Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )
 Dim ds As New DataSet ( )
 daCust.Fill ( ds , "Cust" )
 Return ds
End Function
<WebMethod ( ) > Public Function Update ( ByVal ds As DataSet ) As DataSet
 Dim con As New SqlConnection ( "Server=localhost;uid=sa;pwd=;database=northwind" )
 Dim daCust As New SqlDataAdapter ( "Select * From Customers" , con )
 Dim cbCust As New SqlCommandBuilder ( daCust )
 daCust.Update ( ds , "Cust" )
 Return ds
End Function
#Region " Web 服务设计器生成的代码 "
Public Sub New ( )
 MyBase.New ( )
 '该调用是 Web 服务设计器所必需的。
 InitializeComponent ( )
 '在 InitializeComponent ( ) 调用之后添加您自己的初始化代码
End Sub
'Web 服务设计器所必需的
Private components As System.ComponentModel.IContainer
 '注意:以下过程是 Web 服务设计器所必需的
 '可以使用 Web 服务设计器修改此过程。
 '不要使用代码编辑器修改它。
 <System.Diagnostics.DebuggerStepThrough ( ) > Private Sub InitializeComponent ( )
 components = New System.ComponentModel.Container ( )
End Sub
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
'CODEGEN: 此过程是 Web 服务设计器所必需的
'不要使用代码编辑器修改它。
If disposing Then
 If Not ( components Is Nothing ) Then
  components.Dispose ( )
 End If
End If
MyBase.Dispose ( disposing )
End Sub
#End Region
' Web 服务示例
' HelloWorld ( ) 示例服务返回字符串 Hello World。
' 若要生成项目,请取消注释以下行,然后保存并生成项目。
' 若要测试此 Web 服务,请确保 .asmx 文件为起始页
' 并按 F5 键。
'
'<WebMethod ( ) > Public Function HelloWorld ( ) As String
' HelloWorld = "Hello World"
' End Function
End Class

  下面就来介绍Visual Basic .Net中使用这个Web Service提供的服务来更新数据库的实现方法。五.在Visual Basic .Net调用Web Service提供的服务:

  当Web Service已经处于对外提供服务状态,Visual Basic .Net就可以通过HTTP"调用"来使用这些服务了。当然前提是要了解Web Service对外提供服务所对应的URL,当了解到Web Service对应的URL后,Visual Basic .Net就像是使用本地的类库一样使用Web Service中提供的各种功能。所以有些人说,Web Service从实质上说,就是通过HTTP调用远程组件的一种方式。在Visual Basic .Net具体实现加入Web Service可参阅下面步骤中的第七步。

  在下面介绍的这个数据库应用程序是通过使用上面的Web Service中提供的"Binding"服务,对程序中DataGrid组件实现数据绑定,提供使用Web Service中提供的"Update"服务,通过程序中的DataGrid来修改数据库。下面就是Visual Basic .Net中使用Web Service提供服务来编写数据库应用程序的具体步骤,:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【TestWebService】。

  6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"中就产生了名称为"TestWebService"文件夹,里面存放的就是TestWebService项目的所有文件。

  7. 选择【解决方案资源管理器】|【引用】后,单击鼠标右键,在弹出的菜单中选择【添加Web 引用】,在弹出的【添加Web引用】对话框中的【地址】文本框中输入"http://localhost/ UpdateDataWebService /Service1.asmx "后,单击回车键后,可得图03所示界面。单击图03中【添加引用】按钮,则在【TestWebService】项目中加入了Web引用。请注意"http://localhost/ UpdateDataWebService /Service1.asmx "就是上面完成的Web Service对外提供服务的URL地址,具体可参阅图02所示:

  图03:在【TestWebService】添加Web Service提供的服务

  8. 从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:

  一个DataGrid组件。

  二个Button组件,,分别是Button1至Button2,并在这二个Button组件拖入Form1的设计窗体后,分别双击它们,则系统会在Form1.vb文件分别产生这二个组件的Click事件对应的处理代码。9. 按照表01所示调整窗体中各组件属性的数值:

组件类型
组件名称
属性
设置结果
Form
Form1
Text
测试Web Service
Form1
MaximizeBox
False
Form1
FormBorderStyle
FixedSingle
Button
Button1
Text
绑定
Button1
FlatStyle
Flat
Button2
Text
修改
Button2
FlatStyle
Flat
 

  表01:【TestWebService】项目中组件的主要属性及其对应数值

  在调整完组件属性值后,再按照图04所示调整组件的位置和排列顺序:

  图04:【TestWebService】项目中组件排列位置和顺序

  10. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码功能是使用Web Service中提供的"Binding"服务对DataGrid组件实现数据绑定:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
 Dim MyService As New localhost.Service1 ( )
 DataGrid1.DataSource = MyService.Binding ( )
 DataGrid1.DataMember = "Cust"
End Sub

  11. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码,下列代码功能是使用Web Service中提供的"Update"服务实现通过DataGrid来修改数据库数据:

Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
 Dim MyService As New localhost.Service1 ( )
 Dim ds As DataSet = DataGrid1.DataSource
 Dim dsChanges As DataSet = ds.GetChanges ( )
 If Not ( dsChanges Is Nothing ) Then
  ds.Merge ( MyService.Update ( dsChanges ) , True )
 End If
End Sub

  12. 至此, 【TestWebService】项目的全部工作就完成了,调用Web Service是不是很简单。此时单击快捷键F5运行程序后。单击程序中的【绑定】按钮就会对程序中的DataGrid组件实现数据绑定,单击程序中的【修改】按钮,则程序会根据DataGrid中的内容来更新数据库,图05就是【TestWebService】的运行界面:

  图05:【TestWebService】的运行界面13. Form1.vb的代码清单如下:

Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
Public Sub New ( )
 MyBase.New ( )
 '该调用是 Windows 窗体设计器所必需的。
 InitializeComponent ( )
 '在 InitializeComponent ( ) 调用之后添加任何初始化
End Sub
'窗体重写处置以清理组件列表。
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )
 If disposing Then
  If Not ( components Is Nothing ) Then
   components.Dispose ( )
  End If
 End If
 MyBase.Dispose ( disposing )
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
 '注意:以下过程是 Windows 窗体设计器所必需的
 '可以使用 Windows 窗体设计器修改此过程。
 '不要使用代码编辑器修改它。
 Friend WithEvents Button1 As System.Windows.Forms.Button
 Friend WithEvents Button2 As System.Windows.Forms.Button
 Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
 <System.Diagnostics.DebuggerStepThrough ( ) > Private Sub InitializeComponent ( )
 Me.Button1 = New System.Windows.Forms.Button ( )
 Me.Button2 = New System.Windows.Forms.Button ( )
 Me.DataGrid1 = New System.Windows.Forms.DataGrid ( )
 CType ( Me.DataGrid1 , System.ComponentModel.ISupportInitialize ) .BeginInit ( )
 Me.SuspendLayout ( )
 Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
 Me.Button1.Location = New System.Drawing.Point ( 56 , 216 )
 Me.Button1.Name = "Button1"
 Me.Button1.Size = New System.Drawing.Size ( 75 , 32 )
 Me.Button1.TabIndex = 0
 Me.Button1.Text = "绑定"
 Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat
 Me.Button2.Location = New System.Drawing.Point ( 168 , 216 )
 Me.Button2.Name = "Button2"
 Me.Button2.Size = New System.Drawing.Size ( 75 , 32 )
 Me.Button2.TabIndex = 1
 Me.Button2.Text = "修改"
 Me.DataGrid1.DataMember = ""
 Me.DataGrid1.Dock = System.Windows.Forms.DockStyle.Top
 Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
 Me.DataGrid1.Name = "DataGrid1"
 Me.DataGrid1.Size = New System.Drawing.Size ( 292 , 192 )
 Me.DataGrid1.TabIndex = 2
 Me.AutoScaleBaseSize = New System.Drawing.Size ( 6 , 14 )
 Me.ClientSize = New System.Drawing.Size ( 292 , 273 )
 Me.Controls.AddRange ( New System.Windows.Forms.Control ( ) {Me.DataGrid1 , Me.Button2 , Me.Button1} )
 Me.Name = "Form1"
 Me.Text = "测试Web Service"
 CType ( Me.DataGrid1 , System.ComponentModel.ISupportInitialize ) .EndInit ( )
 Me.ResumeLayout ( False )
End Sub
#End Region
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
 Dim MyService As New localhost.Service1 ( )
 DataGrid1.DataSource = MyService.Binding ( )
 DataGrid1.DataMember = "Cust"
End Sub
Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
 Dim MyService As New localhost.Service1 ( )
 Dim ds As DataSet = DataGrid1.DataSource
 Dim dsChanges As DataSet = ds.GetChanges ( )
 If Not ( dsChanges Is Nothing ) Then
  ds.Merge ( MyService.Update ( dsChanges ) , True )
 End If
End Sub
End Class

  五.总结:

  本文介绍了Web Service在目前大行其道的原因,并结合二个示例介绍Visual Basic .Net在Web Service的实现和调用上的强大功能,正如本文前面所说,Visual Studio .Net的出现使得web Service的这项原先繁杂的工作变得异常的简单,因为Visual Basic .Net已经替代我们作了这些描述性的、基础的底层工作,以至于你不需要了解为什么,只需要知道你要实现什么就可以编写、调用Web Service了。 在实现Web Service在数据库方面应用所显示

  Web Service虽然以其强大功能和其优越性正在受到越来越多人的青睐,但也不可以回避它的缺点,譬如其速度慢就使得我几乎无法忍受。等等这样的原因也决定了Web Service并不适用于所有的环境。如单机运行程序和局域网上的同构应用程序等就尽量不采用Web Service方式。本文只是展示了Visual Studio .Net在Web Service上的初步用途,至于更复杂的使用、调用方法只能在后续的文章中介绍了,感兴趣的朋友,我们下一文再见!

    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐鎼佸磹妞嬪孩顐介柨鐔哄Т閻骞栧ǎ顒€濡肩紒鎰殜閺岋繝宕堕埡浣锋睏闂佸搫顑呴柊锝夊蓟閺囷紕鐤€閻庯綆浜炴禒鐐節濞堝灝鐏犻柕鍫熸倐瀵寮撮敍鍕澑闁诲函缍嗘禍鏍磻閹捐鍐€妞ゆ挶鍔庣粙蹇涙⒑鐠恒劌娅愰柟鍑ゆ嫹

    婵犵數濮烽弫鍛婃叏閻戝鈧倹绂掔€n亞鍔﹀銈嗗坊閸嬫捇鏌涢悢閿嬪仴闁糕斁鍋撳銈嗗坊閸嬫挾绱撳鍜冭含妤犵偛鍟灒閻犲洩灏欑粣鐐烘⒑瑜版帒浜伴柛鎾寸洴閹儳煤椤忓應鎷洪梻鍌氱墛閸楁洟宕奸妷銉ф煣濠电姴锕ょ€氼參宕h箛鏃傜瘈濠电姴鍊绘晶娑㈡煕鐎c劌濡介柕鍥у瀵粙濡歌閳ь剚甯¢弻鐔兼寠婢跺﹥娈婚梺鍝勭灱閸犳牠骞冨⿰鍫濈厸闁稿本绋撹ぐ瀣煟鎼淬値娼愭繛鍙壝悾婵堢矙鐠恒劍娈鹃梺鍓插亝濞叉牠鎮″☉銏$厱閻忕偛澧介惌瀣箾閸喐鍊愭慨濠勭帛閹峰懐绮电€n亝鐣伴梻浣规偠閸斿宕¢崘鑼殾闁靛繈鍊曢崘鈧銈嗗姂閸庡崬鐨梻鍌欑劍鐎笛呯矙閹寸姭鍋撳鐓庡籍鐎规洑鍗冲畷鍗炍熼梹鎰泿闂備線娼ч悧鍡涘箠鎼淬垺鍙忔い鎺嗗亾闁宠鍨块崺銉╁幢濡炲墽鍑规繝鐢靛О閸ㄦ椽鏁嬮柧鑽ゅ仦娣囧﹪濡堕崨顔兼闂佺ǹ顑呴崐鍦崲濞戙垹骞㈡俊顖濐嚙绾板秹鏌f惔銏e妞わ妇鏁诲璇差吋閸偅顎囬梻浣告啞閹搁箖宕版惔顭戞晪闁挎繂顦介弫鍡椼€掑顒婂姛闁活厽顨嗙换娑㈠箻閺夋垹鍔伴梺绋款儐閹瑰洭寮婚敐鍛婵炲棙鍔曠壕鎶芥⒑閸濆嫭婀扮紒瀣灴閸╃偤骞嬮敃鈧婵囥亜閺囩偞鍣洪柍璇诧功缁辨捇宕掑▎鎴濆濡炪們鍔岄幊姗€骞嗗畝鍕<闁绘劙娼х粊锕傛煙閸忚偐鏆橀柛鏂跨焸閹偤宕归鐘辩盎闂佸湱鍎ら崹鐢割敂閳哄懏鍊垫慨姗嗗墻濡插綊鏌曢崶褍顏€殿喕绮欐俊姝岊槼闁革絻鍎崇槐鎾存媴缁涘娈┑鈽嗗亝缁诲牆顕f繝姘亜缁炬媽椴搁弲锝夋偡濠婂啰效闁诡喗锕㈤幊鐘活敆閸屾粣绱查梺鍝勵槸閻楀嫰宕濇惔锝囦笉闁绘劗鍎ら悡娑㈡倶閻愯泛袚闁哥姵锕㈤弻鈩冩媴閻熸澘顫掗悗瑙勬礈閸犳牠銆佸鈧幃鈺呮惞椤愩倝鎷婚梻鍌氬€峰ù鍥х暦閸偅鍙忛柟鎯板Г閳锋梻鈧箍鍎遍ˇ顖炲垂閸岀偞鐓㈡俊顖滃皑缁辨岸鏌ㄥ┑鍡╂Ц缂佲偓鐎n偁浜滈柡宥冨妿閳藉绻涢崼鐔虹煉婵﹨娅e☉鐢稿川椤斾勘鈧劕顪冮妶搴′簼婵炶尙鍠栧畷娲焵椤掍降浜滈柟鍝勬娴滈箖姊洪幐搴㈢┛濠碘€虫搐鍗遍柟鐗堟緲缁秹鏌涢锝囩畼妞ゆ挻妞藉铏圭磼濡搫顫岄悗娈垮櫘閸撴瑨鐏冮梺鍛婁緱閸犳岸宕㈤幖浣光拺闁告挻褰冩禍浠嬫煕鐎n亜顏柟顔斤耿閺佸啴宕掑☉姘箞闂佽鍑界紞鍡涘磻閸℃ɑ娅犳い鎺戝€荤壕濂告煕鐏炲墽鈽夌紒妞﹀洦鐓欓柣鐔告緲椤忣參鏌熼悡搴㈣础闁瑰弶鎸冲畷鐔兼濞戞瑦鐝¢梻鍌氬€搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍌氫壕婵ê宕崢瀵糕偓瑙勬礀缂嶅﹪寮婚崱妤婂悑闁告侗鍨界槐閬嶆煟鎼达紕鐣柛搴ㄤ憾钘濆ù鍏兼綑绾捐法鈧箍鍎遍ˇ浼存偂閺囥垺鐓涢柛銉e劚婵$厧顭胯閸ㄤ即婀侀梺缁樓圭粔顕€顢旈崼鐔虹暢闂傚倷鐒︾€笛呮崲閸屾娑樜旈崨顓犲幒闂佸搫娲㈤崹娲偂閸愵亝鍠愭繝濠傜墕缁€鍫熸叏濡寧纭鹃柦鍐枛閺屾洘绻涜鐎氱兘宕戦妸鈺傗拺缂備焦锚婵洦銇勯弴銊ュ籍闁糕斂鍨藉鎾閳ユ枼鍋撻悽鍛婄叆婵犻潧妫楅埀顒傛嚀閳诲秹宕堕妸锝勭盎闂婎偄娲︾粙鎰板箟妤e啯鐓涢悘鐐靛亾缁€瀣偓瑙勬礋娴滃爼銆佸鈧幃銏$附婢跺澶�

    重磅专题
    往期文章
    最新文章